home *** CD-ROM | disk | FTP | other *** search
/ The PC-SIG Library 10 / The PC-Sig Library - Shareware for the IBM PC and Compatibles (PC-SIG)(Tenth Edition Disks 1-2804)(1991).iso / PC_SIGCD / 20 / 5 / DISK2058.ZIP / UNFAST.EXE / GAME.F < prev    next >
Text File  |  1980-01-01  |  8KB  |  420 lines

  1. ;A game using the sprites.
  2.  
  3. var ce
  4. const bullets=3,enemy=8,backdots=9,deftib=2,key_repeat=1
  5. back_dots ? backdots*3
  6. edata      ? enemy*4
  7. bdata      ? bullets*3
  8. dots      ? 1200
  9.  
  10. high_score=0
  11. screen 6
  12. mode 640,and
  13. video=0b800h ;For CGA emu.
  14. #include keys.fi
  15. set_keys
  16.  
  17. start:
  18. randomize timer
  19. colour 0:cls
  20. colour 7
  21. cursor 12,36:print bios "S P A C E";
  22. c=0:m=dots
  23. for y=96 to 103
  24. for x=288 to 359
  25. if point x,y then
  26.   {
  27.   #short
  28.   poke m,x:pokeb m+2,y
  29.   poke m+5,rnd mod 1700:poke m+7,rnd mod 800
  30.   s=rnd
  31.   if s and 4 then poke m+5,0-peek (m+5)
  32.   if s and 2 then poke m+7,0-peek (m+7)
  33.   m+=9:c++
  34.   if m>=(dots+1200)
  35.    then goto exit_store
  36.   #long
  37.   }
  38. next x
  39. next y
  40. exit_store:
  41. colour 0:cls
  42.  
  43. #short
  44. for rep=1 to 28
  45.   m=dots
  46.   for a=1 to c
  47.   x=peek m
  48.   y=peekb (m+2)
  49.   lx=peekb (m+3):ly=peekb (m+4)
  50.   lx+=peek (m+5):ly+=peek (m+7)
  51.   pokeb m+3,lx:pokeb m+4,ly
  52.   if lx>255 then x+=high lx
  53.   if ly>255 then y+=high ly
  54.   if lx<0 then x-=256-high lx
  55.   if ly<0 then y-=256-high ly
  56.   poke m,x:pokeb m+2,y
  57.   if rep=28 then plot x,y
  58.   m+=9
  59.   next a
  60. next rep
  61.  
  62. repeat 28
  63.   {
  64.   m=dots
  65.   for a=1 to c
  66.   x=peek m:y=peekb (m+2)
  67.   colour 0:plot x,y
  68.   lx=peekb (m+3):ly=peekb (m+4)
  69.   lx-=peek (m+5):ly-=peek (m+7)
  70.   pokeb m+3,lx:pokeb m+4,ly
  71.   if lx>255 then x+=high lx
  72.   if ly>255 then y+=high ly
  73.   if lx<0 then x-=256-high lx
  74.   if ly<0 then y-=256-high ly
  75.   colour 1:plot x,y
  76.   poke m,x:pokeb m+2,y
  77.   m+=9
  78.   next a
  79.   }
  80. for b=1 to 500 step 5:for c=20 to 200 step 40:noise 50,c+b:next c:next b
  81. noise 1,2500
  82. noise off
  83.  
  84. add=back_dots
  85. repeat backdots
  86.   {
  87.   poke add,rnd mod 640
  88.   pokeb add+2,(rnd mod 175)+25
  89.   add+=3
  90.   }
  91.  
  92. repbase=3
  93. score=0:lives=5
  94.  
  95. life:
  96. colour 0:cls
  97. gosub print_lives
  98. x=110:y=90
  99. fillb bullets*3 from bdata with 0
  100. fillb enemy*4 from edata with 0
  101. tib=0:dtime=0
  102. timer=0:frame=0
  103.  
  104.  
  105. loops:
  106. cursor 0,10:print bios "Score ";score;"   High score ";high_score;
  107.  
  108. loop:
  109.  
  110. start_score=score
  111. add=back_dots
  112. repeat backdots
  113.   {
  114.   dx=peek add:dy=peekb (add+2)
  115.   colour 0:plot dx,dy
  116.   dx-=4:if dx<0 then dx=639
  117.   colour 1:plot dx,dy
  118.   poke add,dx
  119.   add+=3
  120.   }
  121.  
  122. if dtime=1 then goto dead
  123. #long
  124. if dtime>1 then dtime--
  125.  else
  126.   {
  127.   #short
  128.   sprite x-18,y,thrust+frame*(2*14+2)
  129.   sprite x-18,y+10,thrust+frame*(2*14+2)
  130.   sprite x,y,spyou
  131.   if key_press(44) then y+=3
  132.   if key_press(30) then y-=3
  133.   if y<30 then y=30
  134.   if y>175 then y=175
  135.   #long
  136.   }
  137. #short
  138. if key_press(1) then goto exit_game
  139.  
  140. add=bdata:fire++
  141. if tib>0 then tib--
  142. repeat bullets
  143.    {
  144.    bx=peek add:by=peekb (add+2)
  145.    f=key_press(28)
  146.    if (dtime=0) and (by=0) and f and ((fire and 3)=0) and (tib=0) then
  147.      {
  148.      for a=600 to 1000 step 12:noise 2,a:next a:noise off
  149.      bx=x+16:by=y+10
  150.      tib=deftib
  151.      }
  152.    #long
  153.    if by then
  154.      {
  155.      #short
  156.      if    bx>580 then sprite bx,by,null_bull:by=0:goto end_b
  157.      bx+=19
  158.      sprite bx,by,bullet
  159.  
  160.      add2=edata
  161.      repeat enemy
  162.        {
  163.        if not peekb (add2+3) then
  164.        {
  165.        if hit bx,by,bullet with peek add2,peekb (add2+2),enemysp 1
  166.      then
  167.      {
  168.      score+=10
  169.      sprite bx,by,null_bull
  170.      pokeb add2+3,5
  171.      by=0
  172.      }
  173.        add2+=4
  174.        }
  175.        }
  176.      #long
  177.      }
  178.    end_b:
  179.    poke add,bx:pokeb add+2,by
  180.    add+=3
  181.    }
  182.  
  183. #short
  184. add=edata
  185. rep=repbase
  186. repeat enemy
  187.   {
  188.   ex=peek add:ey=peekb (add+2)
  189.   time=peekb (add+3)
  190.   if (ey=0) then ex=610:ey=(rnd mod 170)+10:time=0
  191.   #long
  192.   if time then
  193.     {
  194.     time--
  195.     for a=1 to 40:noise 1,1000+rnd and 2047:next a:noise off
  196.     if time then sprite ex,ey+3,explosion+(6-time)/2*(2*5+2)
  197.         else sprite ex,ey+3,en_null:ey=0
  198.     goto end_e
  199.     }
  200.   if ex<x+45 then
  201.     {
  202.     #short
  203.     hf=0
  204.     pokeb enemysp,1
  205.     if dtime=0 then hf=hit x,y,spyou with ex,ey,enemysp 3
  206.     if hf then gosub death:dtime=35
  207.     if ex<10 then
  208.       {
  209.       sprite ex,ey+3,en_null
  210.       ey=0
  211.       goto end_e
  212.       }
  213.     #long
  214.     }
  215.   #short
  216.   rr=rnd
  217.   if ex>(250+repbase*15) then
  218.     {
  219.     if rr and 1 then ey+=rr mod 3 else ey-=rr mod 3
  220.     }
  221.    else
  222.     {
  223.     if ey>y
  224.       then ey-=rr and 3
  225.       else ey+=rr and 3
  226.     }
  227.   if ey<25 then ey=25
  228.   if ey>185 then ey=185
  229.   ex-=rep
  230.   pokeb enemysp,2
  231.   sprite ex,ey,enemysp
  232.   end_e:
  233.   poke add,ex:pokeb add+2,ey:pokeb add+3,time
  234.   add+=4
  235.   rep++:if rep>10 then rep=10
  236.   }
  237.  
  238. #long
  239. if dtime then
  240.   {
  241.   #short
  242.   add=dots
  243.   repeat ce
  244.     {
  245.     ex=peek add:ey=peekb (add+2)
  246.     xi=peekb (add+3)
  247.     yi=peek (add+4)
  248.     noise 1,rnd and 8191
  249.     colour 0:plot ex,ey
  250.     colour 1
  251.     ex+=xi
  252.     if yi and 128
  253.       then ey-=(yi mod 3):ey-=rnd and 1
  254.       else ey+=yi mod 3:ey+=rnd and 1
  255.     plot ex,ey
  256.     poke add,ex:pokeb add+2,ey
  257.     add+=6
  258.     }
  259.   noise off
  260.   #long
  261.   }
  262. #short
  263.  
  264. if timer>360 then
  265.   {
  266.   repbase++
  267.   if repbase>16 then repbase=16
  268.   timer=0
  269.   }
  270. dd2:
  271. frame++:if frame>2 then frame=0
  272.  
  273. if start_score=score then goto loop
  274. if score>high_score then high_score=score
  275. goto loops
  276.  
  277.  
  278. death:    ;Use ADD2 because ADD is used within caller (ENEMY).
  279. add2=dots:ce=0
  280. for a=y+3 to y+18 step 2
  281. for b=x to x+31 step 4
  282. poke add2,b:pokeb add2+2,a
  283. pokeb add2+3,(rnd and 7)+1:poke add2+4,rnd
  284. add2+=6:ce++
  285. if add2>=(dots+1200) then return
  286. next b
  287. next a
  288. return
  289.  
  290. dead:
  291. lives--
  292. if lives then goto life
  293. for y=0 to 23
  294. cursor y+1,y*2:print bios "GAME OVER";
  295. cursor y,2*y-2:print bios "         ";
  296. noise 600,y*50+2000
  297. next y
  298. noise off
  299. repeat 4 repeat 60000 {}
  300. goto start
  301.  
  302. print_lives:
  303. xx=lives-1
  304. while xx>0
  305.   {
  306.   sprite xx*50+350,0,spyou
  307.   xx--
  308.   }
  309. return
  310.  
  311.  
  312. exit_game:
  313. reset_keys
  314. screen 3:terminate
  315.  
  316. spyou:
  317. datab 2,22
  318. data 0,0,0,0,0,0
  319. shape "    ******                      "
  320. shape "****************                "
  321. shape "******                          "
  322. shape "*******                         "
  323. shape "******************              "
  324. shape "** * * ** ***** ***********     "
  325. shape "******** ***** ********  ****** "
  326. shape "*** * * ***** ******************"
  327. shape "*** * * ***** ******************"
  328. shape "******** ***** ********  ****** "
  329. shape "** * * ** ***** ***********     "
  330. shape "******************              "
  331. shape "*******                         "
  332. shape "******                          "
  333. shape "****************                "
  334. shape "    ******                      "
  335. data 0,0,0,0,0,0
  336.  
  337. thrust:
  338. datab 1,14
  339. data 0,0,0
  340. shape "           **   "
  341. shape "          ** *  "
  342. shape "         *  * * "
  343. shape "       *  *  * *"
  344. shape "      ** *  *  *"
  345. shape "         * ** * "
  346. shape "          *  *  "
  347. shape "           **   "
  348. data 0,0,0
  349.  
  350. datab 1,14
  351. data 0,0,0
  352. shape "                "
  353. shape "        * **    "
  354. shape "      ** *   *  "
  355. shape "  * * *   * * * "
  356. shape "   * *  * *  * *"
  357. shape "      ** *  *   "
  358. shape "        ** *    "
  359. shape "                "
  360. data 0,0,0
  361.  
  362. datab 1,14
  363. data 0,0,0
  364. shape "                "
  365. shape "                "
  366. shape "           **   "
  367. shape "   *  * * *  * *"
  368. shape "* * * *  * * * *"
  369. shape "        *  *    "
  370. shape "                "
  371. shape "                "
  372. data 0,0,0
  373.  
  374. null_bull:
  375. datab 2,2
  376. data 0,0,0,0
  377.  
  378. bullet:
  379. datab 2,2
  380. datab 0,0
  381. shape "   ********"
  382. datab 0,0
  383. shape "   ********"
  384.  
  385. enemysp:
  386. datab 2,11
  387. data 0,0,0,0,0,0
  388. shape "  **************          "
  389. shape " ****     ***             "
  390. shape "************              "
  391. shape " *****    ***             "
  392. shape "  **************          "
  393. data 0,0,0,0,0,0
  394.  
  395. en_null:
  396. datab 1,5
  397. data 0,0,0,0,0
  398.  
  399. explosion:
  400. datab 1,5
  401. shape "  *   *   *  *  "
  402. shape "  *     *     * "
  403. shape " *             *"
  404. shape "   * *    *    *"
  405. shape "      * * *  *  "
  406.  
  407. datab 1,5
  408. shape "        *  *    "
  409. shape "    * *   *     "
  410. shape "    *      *    "
  411. shape "     *   *      "
  412. shape "       *        "
  413.  
  414. datab 1,5
  415. shape "                "
  416. shape "      *         "
  417. shape "     ****       "
  418. shape "       *        "
  419. shape "                "
  420.